home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / dev / e / capus2.lha / capus2 / WhatView / Sources / WVDATA.e < prev    next >
Encoding:
Text File  |  1995-04-03  |  34.8 KB  |  897 lines

  1. DEF argstr[256]:STRING
  2. /*"p_OpenLibraries()"*/
  3. PROC p_OpenLibraries() HANDLE 
  4. /*===============================================================================
  5.  = Para         : NONE
  6.  = Return       : ER_NONE if ok,else the error.
  7.  = Description  : Open libraries.
  8.  ==============================================================================*/
  9.     dWriteF(['p_OpenLibraries()\n'],[0])
  10.     IF (execbase:=OpenLibrary('exec.library',37))=NIL THEN Raise(ER_EXECLIB)
  11.     IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise(ER_GADTOOLSLIB)
  12.     IF (whatisbase:=OpenLibrary('whatis.library',3))=NIL THEN Raise(ER_WHATISLIB)
  13.     IF (reqtoolsbase:=OpenLibrary('reqtools.library',37))=NIL THEN Raise(ER_REQTOOLSLIB)
  14.     IF (workbenchbase:=OpenLibrary('workbench.library',37))=NIL THEN Raise(ER_WORKBENCHLIB)
  15.     IF (utilitybase:=OpenLibrary('utility.library',37))=NIL THEN Raise(ER_UTILITYLIB)
  16.     IF (iconbase:=OpenLibrary('icon.library',37))=NIL THEN Raise(ER_ICONLIB)
  17.     IF (cxbase:=OpenLibrary('commodities.library',37))=NIL THEN Raise(ER_COMMODITIESLIB)
  18.     Raise(ER_NONE)
  19. EXCEPT
  20.     RETURN exception
  21. ENDPROC
  22. /**/
  23. /*"p_CloseLibraries()"*/
  24. PROC p_CloseLibraries()  
  25. /*===============================================================================
  26.  = Para         : NONE
  27.  = Return       : NONE
  28.  = Description  : CLose libraries.
  29.  ==============================================================================*/
  30.     dWriteF(['p_CloseLibraries()\n'],[0])
  31.     IF cxbase THEN CloseLibrary(cxbase)
  32.     IF iconbase THEN CloseLibrary(iconbase)
  33.     IF utilitybase THEN CloseLibrary(utilitybase)
  34.     IF workbenchbase THEN CloseLibrary(workbenchbase)
  35.     IF reqtoolsbase THEN CloseLibrary(reqtoolsbase)
  36.     IF whatisbase THEN CloseLibrary(whatisbase)
  37.     IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
  38.     IF execbase THEN CloseLibrary(execbase)
  39. ENDPROC
  40. /**/
  41. /*"p_LockActivePubScreen()"*/
  42. PROC p_LockActivePubScreen()
  43.     DEF ps:PTR TO pubscreennode
  44.     DEF s:PTR TO screen
  45.     DEF sn:PTR TO ln
  46.     DEF psl:PTR TO lh
  47.     DEF ret=NIL
  48.     DEF myintui:PTR TO intuitionbase
  49.     ret:=NIL
  50.     myintui:=intuitionbase
  51.     s:=myintui.activescreen
  52.     IF psl:=LockPubScreenList()
  53.         sn:=psl.head
  54.         WHILE sn
  55.             ps:=sn
  56.             IF sn.succ<>0
  57.                 IF ps.screen=s THEN ret:=sn.name
  58.             ENDIF
  59.             sn:=sn.succ
  60.         ENDWHILE
  61.         UnlockPubScreenList()
  62.     ENDIF
  63.     RETURN ret
  64. ENDPROC
  65. /**/
  66. /*"p_SetUpScreen()"*/
  67. PROC p_SetUpScreen() HANDLE 
  68. /*===============================================================================
  69.  = Para         : NONE
  70.  = Return       : ER_NONE if ok,else the error.
  71.  = Description  : Lock scrren and get visual infos.
  72.  ==============================================================================*/
  73.     DEF pt:PTR TO textattr
  74.     dWriteF(['p_SetUpScreen()\n'],[0])
  75.     IF (screen:=LockPubScreen(p_LockActivePubScreen()))=NIL THEN Raise(ER_LOCKSCREEN)
  76.     IF (visual:=GetVisualInfoA(screen,NIL))=NIL THEN Raise(ER_VISUAL)
  77.     offy:=screen.wbortop+Int(screen.rastport+58)-10
  78.     pt:=screen.font
  79.     IF pt.ysize<=8
  80.         tattr:=[pt.name,pt.ysize,0,0]:textattr
  81.     ELSE
  82.         tattr:=['topaz.font',8,0,0]:textattr
  83.     ENDIF
  84.     Raise(ER_NONE)
  85. EXCEPT
  86.     RETURN exception
  87. ENDPROC
  88. /**/
  89. /*"p_SetDownScreen()"*/
  90. PROC p_SetDownScreen() 
  91. /*===============================================================================
  92.  = Para         : NONE
  93.  = Return       : NONE
  94.  = Description  : Free visual info and unlock screen.
  95.  ==============================================================================*/
  96.     dWriteF(['p_SetDownScreen()\n'],[0])
  97.     IF visual THEN FreeVisualInfo(visual)
  98.     IF screen THEN UnlockPubScreen(NIL,screen)
  99.     screen:=NIL
  100. ENDPROC
  101. /**/
  102. /*"p_SetUpInfoScreen()"*/
  103. PROC p_SetUpInfoScreen() HANDLE 
  104. /*===============================================================================
  105.  = Para         : NONE
  106.  = Return       : ER_NONE if ok,else the error.
  107.  = Description  : Lock scrren and get visual infos.
  108.  ==============================================================================*/
  109.     DEF pt:PTR TO textattr
  110.     dWriteF(['p_SetUpInfoScreen()\n'],[0])
  111.     IF (i_screen:=LockPubScreen(p_LockActivePubScreen()))=NIL THEN Raise(ER_LOCKSCREEN)
  112.     IF (i_visual:=GetVisualInfoA(i_screen,NIL))=NIL THEN Raise(ER_VISUAL)
  113.     offy:=i_screen.wbortop+Int(i_screen.rastport+58)-10
  114.     pt:=i_screen.font
  115.     IF pt.ysize<=8
  116.         tattr:=[pt.name,pt.ysize,0,0]:textattr
  117.     ELSE
  118.         tattr:=['topaz.font',8,0,0]:textattr
  119.     ENDIF
  120.     Raise(ER_NONE)
  121. EXCEPT
  122.     RETURN exception
  123. ENDPROC
  124. /**/
  125. /*"p_SetDownInfoScreen()"*/
  126. PROC p_SetDownInfoScreen() 
  127. /*===============================================================================
  128.  = Para         : NONE
  129.  = Return       : NONE
  130.  = Description  : Free visual info and unlock screen.
  131.  ==============================================================================*/
  132.     dWriteF(['p_SetDownScreen()\n'],[0])
  133.     IF i_visual THEN FreeVisualInfo(i_visual)
  134.     IF i_screen THEN UnlockPubScreen(NIL,i_screen)
  135.     i_screen:=NIL
  136. ENDPROC
  137. /**/
  138. /*"p_InitwvWindow()"*/
  139. PROC p_InitwvWindow() HANDLE 
  140. /*===============================================================================
  141.  = Para         : NONE
  142.  = Return       : ER_NONE if ok,else the error.
  143.  = Description  : Build the gadgets lists.
  144.  ==============================================================================*/
  145.     DEF g:PTR TO gadget
  146.     dWriteF(['p_InitwvWindow()\n'],[0])
  147.     IF (g:=CreateContext({wv_glist}))=NIL THEN Raise(ER_CONTEXT)
  148.     IF (g_whatview:=CreateGadgetA(BUTTON_KIND,g,[offx+18,offy+17,91,12,'_Whatview',tattr,0,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  149.     IF (g_info:=CreateGadgetA(BUTTON_KIND,g_whatview,[offx+109,offy+17,91,12,'_Info',tattr,1,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  150.     IF (g_addicon:=CreateGadgetA(BUTTON_KIND,g_info,[offx+200,offy+17,91,12,'_AddIcon',tattr,2,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  151.     IF (g_execute:=CreateGadgetA(BUTTON_KIND,g_addicon,[offx+18,offy+30,91,12,'_Execute',tattr,3,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  152.     IF (g_prefs:=CreateGadgetA(BUTTON_KIND,g_execute,[offx+109,offy+30,91,12,'_Prefs',tattr,4,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  153.     IF (g_quit:=CreateGadgetA(BUTTON_KIND,g_prefs,[offx+200,offy+30,91,12,'_Quit',tattr,5,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  154.     Raise(ER_NONE)
  155. EXCEPT
  156.     RETURN exception
  157. ENDPROC
  158. /**/
  159. /*"p_RenderwvWindow()"*/
  160. PROC p_RenderwvWindow() 
  161. /*===============================================================================
  162.  = Para         : NONE
  163.  = Return       : NONE
  164.  = Description  : Redraw Bevelbox and refresh gadgets.
  165.  ==============================================================================*/
  166.     dWriteF(['p_RenderwvWindow()\n'],[0])
  167.     DrawBevelBoxA(wv_window.rport,offx+9,offy+14,290,33,[GTBB_RECESSED,0,GT_VISUALINFO,visual,TAG_DONE])
  168.     RefreshGList(g_whatview,wv_window,NIL,-1)
  169.     Gt_RefreshWindow(wv_window,NIL)
  170. ENDPROC
  171. /**/
  172. /*"p_OpenwvWindow()"*/
  173. PROC p_OpenwvWindow() HANDLE 
  174. /*===============================================================================
  175.  = Para         : NONE
  176.  = Return       : ER_NONE if ok,else the error.
  177.  = Description  : Open WhatView Window (init app window).
  178.  ==============================================================================*/
  179.     DEF txt[80]:STRING
  180.     StringF(txt,'WhatView <\s>',hotkey)
  181.     StrCopy(wtxt,txt,ALL)
  182.     dWriteF(['p_OpenwvWindow()\n'],[0])
  183.     IF undermouse=TRUE
  184.         winx:=screen.mousex-153
  185.         winy:=screen.mousey-25
  186.     ENDIF
  187.     IF (wv_window:=OpenWindowTagList(NIL,
  188.                       [WA_LEFT,winx,
  189.                        WA_TOP,winy,
  190.                        WA_WIDTH,offx+307,
  191.                        WA_HEIGHT,offy+51,
  192.                        WA_IDCMP,$240+IDCMP_RAWKEY,
  193.                        WA_FLAGS,$102E,
  194.                        WA_GADGETS,wv_glist,
  195.                        WA_CUSTOMSCREEN,screen,
  196.                        WA_TITLE,wtxt,
  197.                        WA_SCREENTITLE,title_req,
  198.                        TAG_DONE]))=NIL
  199.         IF (wv_window:=OpenWindowTagList(NIL,
  200.                           [WA_LEFT,10,
  201.                            WA_TOP,10,
  202.                            WA_WIDTH,offx+307,
  203.                            WA_HEIGHT,offy+51,
  204.                            WA_IDCMP,$240,
  205.                            WA_FLAGS,$102E,
  206.                            WA_GADGETS,wv_glist,
  207.                            WA_TITLE,wtxt,
  208.                            WA_SCREENTITLE,title_req,
  209.                            TAG_DONE]))=NIL THEN Raise(ER_WINDOW)
  210.     ENDIF
  211.     p_RenderwvWindow()
  212.     IF (appwindow:=AddAppWindowA(0,0,wv_window,prgport,NIL))=NIL THEN Raise(ER_APPWIN)
  213.     Raise(ER_NONE)
  214. EXCEPT
  215.     RETURN exception
  216. ENDPROC
  217. /**/
  218. /*"p_RemwvWindow()"*/
  219. PROC p_RemwvWindow() 
  220. /*===============================================================================
  221.  = Para         : NONE
  222.  = Return       : NONE
  223.  = Description  : rem app window free gadgets lists and close WhatView Window.
  224.  ==============================================================================*/
  225.     dWriteF(['p_RemwvWindow()\n'],[0])
  226.     IF appwindow THEN RemoveAppWindow(appwindow)
  227.     winx:=wv_window.leftedge
  228.     winy:=wv_window.topedge
  229.     IF wv_window THEN CloseWindow(wv_window)
  230.     IF wv_glist THEN FreeGadgets(wv_glist)
  231.     wv_window:=NIL
  232. ENDPROC
  233. /**/
  234. /*"p_OpenWindow()"*/
  235. PROC p_OpenWindow() HANDLE 
  236. /*===============================================================================
  237.  = Para         : NONE
  238.  = Return       : ER_NONE if ok,else the error.
  239.  = Description  : Lock,init gagets lists and open whatview window.
  240.  ==============================================================================*/
  241.     DEF t
  242.     dWriteF(['p_OpenWindow()\n'],[0])
  243.     IF (t:=p_SetUpScreen())<>ER_NONE THEN Raise(t)
  244.     IF (t:=p_InitwvWindow())<>ER_NONE THEN Raise(t)
  245.     IF (t:=p_OpenwvWindow())<>ER_NONE THEN Raise(t)
  246.     Raise(ER_NONE)
  247. EXCEPT
  248.     RETURN exception
  249. ENDPROC
  250. /**/
  251. /*"p_CloseWindow()"*/
  252. PROC p_CloseWindow() 
  253. /*===============================================================================
  254.  = Para         : NONE
  255.  = Return       : NONE
  256.  = Description  : free gadgets lists,close window and unlock screen.
  257.  ==============================================================================*/
  258.     dWriteF(['p_CloseWindow()\n'],[0])
  259.     IF wv_window THEN p_RemwvWindow()
  260.     IF screen THEN p_SetDownScreen()
  261. ENDPROC
  262. /**/
  263. /*"p_InitinfoWindow()"*/
  264. PROC p_InitinfoWindow() HANDLE
  265.     DEF g:PTR TO gadget
  266.     IF (g:=CreateContext({info_glist}))=NIL THEN Raise(ER_CONTEXT)
  267.     IF (g_inform:=CreateGadgetA(LISTVIEW_KIND,g,[offx+4,offy+12,513,73,'',tattr,0,0,i_visual,0]:newgadget,[GA_RELVERIFY,TRUE,GTLV_READONLY,GTLV_LABELS,NIL,GT_UNDERSCORE,"_",TAG_DONE]))=NIL THEN Raise(ER_GADGET)
  268.     Raise(ER_NONE)
  269. EXCEPT
  270.     RETURN exception
  271. ENDPROC
  272. /**/
  273. /*"p_RenderinfoWindow()"*/
  274. PROC p_RenderinfoWindow() 
  275.     Gt_SetGadgetAttrsA(g_inform,info_window,NIL,[GA_RELVERIFY,TRUE,GTLV_LABELS,infolist,TAG_DONE])
  276.     RefreshGList(g_inform,info_window,NIL,-1)
  277.     Gt_RefreshWindow(info_window,NIL)
  278.     ActivateWindow(info_window)
  279.     WindowToFront(info_window)
  280. ENDPROC
  281. /**/
  282. /*"p_OpeninfoWindow()"*/
  283. PROC p_OpeninfoWindow() HANDLE 
  284.     IF (info_window:=OpenWindowTagList(NIL,
  285.                       [WA_LEFT,356,
  286.                        WA_TOP,89,
  287.                        WA_WIDTH,offx+522,
  288.                        WA_HEIGHT,offy+82,
  289.                        WA_IDCMP,$400278+IDCMP_RAWKEY,
  290.                        WA_FLAGS,$102E,
  291.                        WA_GADGETS,info_glist,
  292.                        WA_CUSTOMSCREEN,i_screen,
  293.                        WA_TITLE,'WhatView Informations.',
  294.                        WA_SCREENTITLE,title_req,
  295.                        TAG_DONE]))=NIL THEN Raise(ER_WINDOW)
  296.     Gt_RefreshWindow(info_window,NIL)
  297.     p_RenderinfoWindow()
  298.     Raise(ER_NONE)
  299. EXCEPT
  300.     RETURN exception
  301. ENDPROC
  302. /**/
  303. /*"p_ReminfoWindow()"*/
  304. PROC p_ReminfoWindow() 
  305.     DEF mes
  306.     IF info_window<>NIL
  307.         WHILE (mes:=Gt_GetIMsg(info_window.userport)) DO Gt_ReplyIMsg(mes)
  308.         CloseWindow(info_window)
  309.     ENDIF
  310.     IF info_glist THEN FreeGadgets(info_glist)
  311.     info_window:=NIL
  312. ENDPROC
  313. /**/
  314. /*"p_OpenInfoWindow()"*/
  315. PROC p_OpenInfoWindow() HANDLE 
  316. /*===============================================================================
  317.  = Para         : NONE
  318.  = Return       : ER_NONE if ok,else the error.
  319.  = Description  : Lock,init gagets lists and open whatview window.
  320.  ==============================================================================*/
  321.     DEF t
  322.     dWriteF(['p_OpenInfoWindow()\n'],[0])
  323.     IF (t:=p_SetUpInfoScreen())<>ER_NONE THEN Raise(t)
  324.     IF (t:=p_InitinfoWindow())<>ER_NONE THEN Raise(t)
  325.     IF (t:=p_OpeninfoWindow())<>ER_NONE THEN Raise(t)
  326.     Raise(ER_NONE)
  327. EXCEPT
  328.     RETURN exception
  329. ENDPROC
  330. /**/
  331. /*"p_CloseInfoWindow()"*/
  332. PROC p_CloseInfoWindow() 
  333. /*===============================================================================
  334.  = Para         : NONE
  335.  = Return       : NONE
  336.  = Description  : free gadgets lists,close window and unlock screen.
  337.  ==============================================================================*/
  338.     dWriteF(['p_CloseInfoWindow()\n'],[0])
  339.     IF info_window THEN p_ReminfoWindow()
  340.     IF infolist THEN p_CleanList(infolist,FALSE,0,LIST_CLEAN)
  341.     IF i_screen THEN p_SetDownInfoScreen()
  342. ENDPROC
  343. /**/
  344. /*"dWriteF(format,dat)"*/
  345. PROC dWriteF(format,data) 
  346. /*===============================================================================
  347.  = Para         : PTR TO LONG,PTR TO LONG
  348.  = Return       : NONE
  349.  = Description  : WriteF() if DEBUG=TRUE.
  350.  ==============================================================================*/
  351.     DEF p_format[10]:LIST
  352.     DEF p_data[10]:LIST
  353.     DEF b
  354.     p_format:=format
  355.     p_data:=data
  356.     FOR b:=0 TO ListLen(p_format)-1
  357.         IF DEBUG=TRUE THEN WriteF(p_format[b],p_data[b])
  358.     ENDFOR
  359. ENDPROC
  360. /**/
  361. /*"p_InitList()"*/
  362. PROC p_InitList() HANDLE 
  363. /*===============================================================================
  364.  = Para         : NONE
  365.  = Return       : Address of a new list if ok,else NIL.
  366.  = Description  : Initialise a list.
  367.  ==============================================================================*/
  368.     DEF i_list:PTR TO lh
  369.     dWriteF(['p_InitList()\n'],[0])
  370.     i_list:=New(SIZEOF lh)
  371.     i_list.tail:=0
  372.     i_list.head:=i_list.tail
  373.     i_list.tailpred:=i_list.head
  374.     i_list.type:=0
  375.     i_list.pad:=0
  376.     IF i_list THEN Raise(i_list) ELSE Raise(NIL)
  377. EXCEPT
  378.     RETURN exception
  379. ENDPROC
  380. /**/
  381. /*"p_GetNumNode(ptr_list,adr_node)"*/
  382. PROC p_GetNumNode(ptr_list,adr_node) 
  383. /*===============================================================================
  384.  = Para         : address of list,address of node.
  385.  = Return       : the num of node.
  386.  = Description  : find the number of a node.
  387.  ==============================================================================*/
  388.     DEF g_list:PTR TO lh
  389.     DEF g_node:PTR TO ln
  390.     DEF count=0
  391.     g_list:=ptr_list
  392.     g_node:=g_list.head
  393.     WHILE g_node
  394.         IF g_node=adr_node THEN RETURN count
  395.         INC count
  396.         g_node:=g_node.succ
  397.     ENDWHILE
  398.     /*RETURN NIL*/
  399.     RETURN -1
  400. ENDPROC
  401. /**/
  402. /*"p_CleanActionList(list:PTR TO lh)"*/
  403. PROC p_CleanActionList(list:PTR TO lh) 
  404. /*===============================================================================
  405.  = Para         : address of list.
  406.  = Return       : NONE
  407.  = Description  : Clean the Action List.
  408.  ==============================================================================*/
  409.     DEF eactnode:PTR TO actionnode
  410.     DEF node:PTR TO ln
  411.     dWriteF(['p_CleanActionList()\n'],[0])
  412.     eactnode:=list.head
  413.     WHILE eactnode
  414.         node:=eactnode
  415.         IF node.succ<>0
  416.             IF node.name THEN DisposeLink(node.name)
  417.             IF eactnode.command THEN DisposeLink(eactnode.command)
  418.             IF eactnode.currentdir THEN DisposeLink(eactnode.currentdir)
  419.             IF eactnode.cmd THEN DisposeLink(eactnode.cmd)
  420.             IF eactnode THEN Dispose(eactnode)
  421.             IF node.succ=0
  422.                 RemTail(list)
  423.             ELSEIF node.pred=0
  424.                 RemHead(list)
  425.             ELSEIF (node.succ<>0) AND (node.pred<>0)
  426.                 Remove(node)
  427.             ENDIF
  428.         ENDIF
  429.         eactnode:=node.succ
  430.     ENDWHILE
  431.     list.tail:=0
  432.     list.head:=list.tail
  433.     list.tailpred:=list.head
  434.     list.type:=0
  435.     list.pad:=0
  436. ENDPROC
  437. /**/
  438. /*"p_EmptyList(adr_list)"*/
  439. PROC p_EmptyList(adr_list) 
  440. /*===============================================================================
  441.  = Para         : address of list.
  442.  = Return       : TRUE if list is empty,else the address of list.
  443.  = Description  : look if a list is empty.
  444.  ==============================================================================*/
  445.     DEF e_list:PTR TO lh,count=0
  446.     DEF e_node:PTR TO ln
  447.     dWriteF(['p_EmptyList()\n'],[0])
  448.     e_list:=adr_list
  449.     e_node:=e_list.head
  450.     WHILE e_node
  451.         IF e_node.succ<>0 THEN INC count
  452.         dWriteF(['Count \d\n'],[count])
  453.         e_node:=e_node.succ
  454.     ENDWHILE
  455.     IF count=0 THEN RETURN TRUE ELSE RETURN e_list
  456. ENDPROC
  457. /**/
  458. /*"p_RemoveActionList(list:PTR TO lh,mode)"*/
  459. PROC p_RemoveActionList(list:PTR TO lh,mode) 
  460. /*===============================================================================
  461.  = Para         : address of list,mode (FALSE or TRUE)
  462.  = Return       : NONE
  463.  = Description  : Clean Action list if mode=FALSE,Clean and Remove if mode=TRUE.
  464.  ==============================================================================*/
  465.     dWriteF(['p_RemoveActionList()\n'],[0])
  466.     p_CleanActionList(list)
  467.     IF mode=TRUE
  468.         IF list THEN Dispose(list)
  469.     ENDIF
  470. ENDPROC
  471. /**/
  472. /*"p_AjouteArgNode(list:PTR TO lh,argname,arglock)"*/
  473. PROC p_AjouteArgNode(list:PTR TO lh,argname,arglock) 
  474. /*===============================================================================
  475.  = Para         : address of list,argname (STRING), arglock.
  476.  = Return       : NONE
  477.  = Description  : Add a argument to the Arg List.
  478.  ==============================================================================*/
  479.     DEF myarg:PTR TO wvarg
  480.     DEF node:PTR TO ln
  481.     DEF pv[256]:STRING
  482.     DEF fullname[256]:STRING
  483.     DEF idstring[9]:STRING
  484.     DEF nn,idtype,lock=NIL,fib:fileinfoblock
  485.     DEF size
  486.     DEF reelname[256]:STRING
  487.     DEF reellock=NIL
  488.     DEF datestring[80]:STRING
  489.     StringF(reelname,'\s',argname)
  490.     reellock:=arglock
  491.     dWriteF(['p_AjouteArgNode()\n'],[0])
  492.     myarg:=New(SIZEOF wvarg)
  493.     NameFromLock(arglock,pv,256)
  494.     AddPart(pv,'',256)
  495.     IF EstrLen(reelname)<>0
  496.         StringF(fullname,'\s\s',pv,reelname)
  497.     ELSE
  498.         StringF(fullname,'\s',pv)
  499.     ENDIF
  500.     IF lock:=Lock(fullname,-2)
  501.         IF Examine(lock,fib)
  502.             size:=fib.size
  503.             IF fib.size=0
  504.                 StringF(fullname,'\s\s',pv,argname)
  505.                 StringF(argname,'\s',fib.filename)
  506.             ELSE
  507.             ENDIF
  508.             IF fib THEN Dispose(fib)
  509.         ENDIF
  510.         dWriteF(['Lock() \h[8] ','ArgLock() \h[8]',' ReelLock \h[8]\n'],[lock,arglock,reellock])
  511.         StrCopy(datestring,p_GetReelDate(fib.datestamp),ALL)
  512.         IF lock THEN UnLock(lock)
  513.     ENDIF
  514.     myarg.lock:=DupLock(reellock)
  515.     dWriteF(['Lock() \h[8] ','ArgLock() \h[8] ','DupLock() \h[8]\n'],[lock,arglock,myarg.lock])
  516.     idtype:=WhatIs(fullname,[WI_DEEP,1])
  517.     idstring:=GetIDString(idtype)
  518.     node:=New(SIZEOF ln)
  519.     node.succ:=0
  520.     myarg.size:=size
  521.     node.name:=String(EstrLen(argname))
  522.     StrCopy(node.name,argname,ALL)
  523.     CopyMem(node,myarg.node,SIZEOF ln)
  524.     AddTail(list,myarg.node)
  525.     nn:=p_GetNumNode(list,myarg.node)
  526.     IF nn=-1
  527.         list.head:=myarg.node
  528.         node.pred:=0
  529.     ENDIF
  530.     IF idstring
  531.         StringF(pv,'\s',idstring)
  532.         myarg.idstring:=String(EstrLen(pv))
  533.         StrCopy(myarg.idstring,pv,ALL)
  534.     ENDIF
  535.     IF datestring
  536.         myarg.date:=String(EstrLen(datestring))
  537.         StrCopy(myarg.date,datestring,ALL)
  538.     ENDIF
  539.     IF node THEN Dispose(node)
  540. ENDPROC
  541. /**/
  542. /*"p_RemoveArgList(list:PTR TO lh,mode)"*/
  543. PROC p_RemoveArgList(list:PTR TO lh,mode) 
  544. /*===============================================================================
  545.  = Para         : address of a list,mode (TRUE or FALSE).
  546.  = Return       : NONE
  547.  = Description  : Remove all nodes of tha Arg List,if mode=TRUE remove the list too.
  548.  ==============================================================================*/
  549.     DEF rarg:PTR TO wvarg
  550.     DEF node:PTR TO ln
  551.     dWriteF(['p_RemoveArgList()\n'],[0])
  552.     rarg:=list.head
  553.     WHILE rarg
  554.         node:=rarg
  555.         IF node.succ<>0
  556.             IF node.name THEN DisposeLink(node.name)
  557.             IF rarg.lock THEN UnLock(rarg.lock)
  558.             IF rarg.date THEN DisposeLink(rarg.date)
  559.             IF rarg.idstring THEN DisposeLink(rarg.idstring)
  560.         ENDIF
  561.         IF node.succ=0
  562.             RemTail(list)
  563.         ELSEIF node.pred=0
  564.             RemHead(list)
  565.         ELSEIF (node.succ<>0) AND (node.pred<>0)
  566.             Remove(node)
  567.         ENDIF
  568.         rarg:=node.succ
  569.     ENDWHILE
  570.     IF mode=TRUE
  571.         IF list THEN Dispose(list)
  572.     ELSE
  573.         list.tail:=0
  574.         list.head:=list.tail
  575.         list.tailpred:=list.head
  576.         list.type:=0
  577.         list.pad:=0
  578.     ENDIF
  579. ENDPROC
  580. /**/
  581. /*"p_WriteFArgList(list:PTR TO lh,action)"*/
  582. PROC p_WriteFArgList(list:PTR TO lh,action) 
  583. /*===============================================================================
  584.  = Para         : address of list,action (ACT_WHATVIEW report to p_WriteFActionList()).
  585.  = Return       : NONE
  586.  = Description  : Perform command with is arguments (ACT_INFO,ACT_ADDICON,ACT_EXECUTE).
  587.  ==============================================================================*/
  588.     DEF rarg:PTR TO wvarg
  589.     DEF node:PTR TO ln
  590.     DEF sn:PTR TO ln
  591.     DEF anode:PTR TO actionnode
  592.     DEF panode:PTR TO actionnode
  593.     DEF mode
  594.     DEF piv[4096]:STRING
  595.     DEF fullname[256]:STRING
  596.     DEF mywbarg:PTR TO wbarg,posbuf=NIL
  597.     DEF oldcd,retstr
  598.     DEF infostr[256]:STRING
  599.     DEF l
  600.     DEF idtype,parentidtype,parentstrtype[9]:STRING
  601.     dWriteF(['p_WriteFArgList()\n'],[0])
  602.     rarg:=list.head
  603.     WHILE rarg
  604.         node:=rarg
  605.         IF node.succ<>0
  606.                 SELECT action
  607.                     CASE ACT_WHATVIEW
  608.                         IF anode:=FindName(myw.adractionlist,rarg.idstring)
  609.                             IF anode.usesubtype
  610.                                 StringF(infostr,'\s',rarg.idstring)
  611.                                 idtype:=GetIDType(infostr)
  612.                                 parentidtype:=ParentFileType(idtype)
  613.                                 parentstrtype:=GetIDString(parentidtype)
  614.                                 IF panode:=FindName(myw.adractionlist,parentstrtype)
  615.                                     anode:=panode
  616.                                 ELSE
  617.                                     p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_COMASS),
  618.                                                     get_WhatView_string(MSGWHATVIEW_COMASS_GAD),[rarg.idstring,parentstrtype])
  619.                                     JUMP skip
  620.                                 ENDIF
  621.                             ENDIF
  622.                             mode:=anode.exectype
  623.                             IF anode.numarg=0
  624.                                 posbuf:=anode.arglist
  625.                             ELSE
  626.                                 posbuf:=anode.arglist+(anode.numarg*SIZEOF wbarg)
  627.                             ENDIF
  628.                             SELECT mode
  629.                                 CASE MODE_WB
  630.                                     IF (anode.numarg<maxarg)
  631.                                         anode.numarg:=anode.numarg+1
  632.                                         mywbarg:=New(SIZEOF wbarg)
  633.                                         mywbarg.lock:=rarg.lock
  634.                                         IF node.name
  635.                                             mywbarg.name:=node.name
  636.                                         ELSE
  637.                                             mywbarg.name:=''
  638.                                         ENDIF
  639.                                         CopyMem(mywbarg,posbuf,SIZEOF wbarg)
  640.                                         posbuf:=posbuf+(anode.numarg*SIZEOF wbarg)
  641.                                         IF mywbarg THEN Dispose(mywbarg)
  642.                                     ENDIF
  643.                                     anode.cmd:=0
  644.                                 CASE MODE_CLI
  645.                                     anode.numarg:=-1
  646.                                     NameFromLock(rarg.lock,piv,256)
  647.                                     IF rarg.size<>0 THEN AddPart(piv,node.name,256)
  648.                                     StringF(fullname,' "\s" ',piv)
  649.                                     StringF(piv,'\s \s',anode.cmd,fullname)
  650.                                     IF anode.cmd THEN DisposeLink(anode.cmd)
  651.                                     anode.cmd:=String(EstrLen(piv))
  652.                                     StrCopy(anode.cmd,piv,ALL)
  653.                             ENDSELECT
  654.                         ELSE
  655.                             IF p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_NOCOM),get_WhatView_string(MSGWHATVIEW_NOCOM_GAD),[node.name,rarg.idstring,rarg.size,rarg.date])=FALSE THEN JUMP exit
  656.                         ENDIF
  657.                     CASE ACT_INFO
  658.                         /*IF p_MakeWVRequest('Fichier :\s\nType    :\s\nSize    :\d\nDate    :\s','_Suivant|S_ortie',[node.name,rarg.idstring,rarg.size,rarg.date])=FALSE THEN JUMP exit*/
  659.                         StringF(infostr,'\l\s[32] \r\d[9] \l\s[8] \l\s[9]',node.name,rarg.size,rarg.date,rarg.idstring)
  660.                         p_AjouteNode(infolist,infostr,0)
  661.                     CASE ACT_ADDICON
  662.                         NameFromLock(rarg.lock,piv,256)
  663.                         IF rarg.size<>0 THEN AddPart(piv,node.name,256)
  664.                         StringF(fullname,'\s',piv)
  665.                         dWriteF(['FullName :\s',' Name :\s',' Size:\d',' IDString:\s\n'],[piv,node.name,rarg.size,rarg.idstring])
  666.                         p_AddIcon(fullname,node.name,rarg.size,rarg.idstring)
  667.                     CASE ACT_EXECUTE
  668.                         l:=rarg.lock
  669.                         IF anode:=FindName(myw.adractionlist,rarg.idstring)
  670.                             IF anode.usesubtype
  671.                                 StringF(infostr,'\s',rarg.idstring)
  672.                                 idtype:=GetIDType(infostr)
  673.                                 parentidtype:=ParentFileType(idtype)
  674.                                 parentstrtype:=GetIDString(parentidtype)
  675.                                 IF panode:=FindName(myw.adractionlist,parentstrtype)
  676.                                     anode:=panode
  677.                                 ELSE
  678.                                     p_MakeWVRequest(get_WhatView_string(MSGWHATVIEW_COMASS),
  679.                                                     get_WhatView_string(MSGWHATVIEW_COMASS_GAD),[rarg.idstring,parentstrtype])
  680.                                     JUMP skip
  681.                                 ENDIF
  682.                             ENDIF
  683.                             StringF(infostr,'\s "\s"',anode.command,node.name)
  684.                         ELSE
  685.                             StringF(infostr,'"\s"',node.name)
  686.                         ENDIF
  687.                         IF retstr:=p_MakeWVStringReq(node.name,rarg.idstring,rarg.size,infostr)
  688.                             NameFromLock(l,piv,256)
  689.                             oldcd:=CurrentDir(l)
  690.                             StringF(piv,'\s',argstr)
  691.                             /*WriteF('\s \s\n',piv,infostr)*/
  692.                             Execute(piv,0,stdout)
  693.                             CurrentDir(oldcd)
  694.                         ENDIF
  695.                 ENDSELECT
  696.                 skip:
  697.         ENDIF
  698.         rarg:=node.succ
  699.     ENDWHILE
  700.     exit:
  701.     IF action=ACT_WHATVIEW THEN p_WriteFActionList(myw.adractionlist,ACT_WHATVIEW)
  702.     dWriteF(['Action \d',' Info_Window \h[8]\n'],[action,info_window])
  703.     IF action=ACT_INFO
  704.         IF info_window=NIL
  705.             IF (p_OpenInfoWindow())<>ER_NONE
  706.                 p_MakeWVRequest(get_WhatView_string(MSGERWHATVIEW_INFOWINDOW),get_WhatView_string(MSGWHATVIEW_COMASS_GAD),0)
  707.             ENDIF
  708.         ELSE
  709.             p_RenderinfoWindow()
  710.         ENDIF
  711.     ENDIF
  712. ENDPROC
  713. /**/
  714. /*"p_WriteFActionList(list:PTR TO lh,action)"*/
  715. PROC p_WriteFActionList(list:PTR TO lh,action) 
  716. /*===============================================================================
  717.  = Para         : address of list,action (always ACT_WHATVIEW).
  718.  = Return       : NONE
  719.  = Description  : Perform ACT_WHATVIEW.
  720.  ==============================================================================*/
  721.     DEF eactnode:PTR TO actionnode
  722.     DEF node:PTR TO ln
  723.     DEF mode=NIL
  724.     DEF pv[4096]:STRING
  725.     dWriteF(['p_WriteFActionList()\n'],[0])
  726.     eactnode:=list.head
  727.     WHILE eactnode
  728.         node:=eactnode
  729.         IF node.succ<>0
  730.             SELECT action
  731.                 CASE ACT_WHATVIEW
  732.                         mode:=eactnode.exectype
  733.                         IF (eactnode.numarg>0) OR (eactnode.numarg=-1)
  734.                             SELECT mode
  735.                                 CASE MODE_WB
  736.                                     p_WBRun(eactnode.command,eactnode.currentdir,eactnode.stack,eactnode.priority,eactnode.numarg,eactnode.arglist)
  737.                                     eactnode.numarg:=0
  738.                                 CASE MODE_CLI
  739.                                     StringF(pv,'\s \s',eactnode.command,eactnode.cmd)
  740.                                     p_CLIRun(pv,eactnode.currentdir,eactnode.stack,eactnode.priority)
  741.                             ENDSELECT
  742.                         ENDIF
  743.                 CASE ACT_INFO
  744.             ENDSELECT
  745.         ENDIF
  746.         eactnode:=node.succ
  747.     ENDWHILE
  748. ENDPROC
  749. /**/
  750. /*"p_CleanArgActionList(list:PTR TO lh)"*/
  751. PROC p_CleanArgActionList(list:PTR TO lh) 
  752. /*===============================================================================
  753.  = Para         : address of list.
  754.  = Return       : NONE.
  755.  = Description  : Clean the cmd of alls nodes in the Action list.
  756.  ==============================================================================*/
  757.     DEF eactnode:PTR TO actionnode
  758.     DEF node:PTR TO ln
  759.     dWriteF(['p_CleanArgActionList()\n'],[0])
  760.     eactnode:=list.head
  761.     WHILE eactnode
  762.         node:=eactnode
  763.         IF node.succ<>0
  764.             eactnode.numarg:=0
  765.             IF (eactnode.cmd) THEN DisposeLink(eactnode.cmd)
  766.             eactnode.cmd:=0
  767.         ENDIF
  768.         eactnode:=node.succ
  769.     ENDWHILE
  770. ENDPROC
  771. /**/
  772. /*"p_GetReelDate(st)"*/
  773. PROC p_GetReelDate(st) 
  774.     DEF date:PTR TO datetime
  775.     DEF strdate[LEN_DATSTRING]:STRING
  776.     DEF strday[LEN_DATSTRING]:STRING
  777.     DEF strtime[LEN_DATSTRING]:STRING
  778.     DEF r_str[80]:STRING
  779.     /* Date Data */
  780.     date:=New(SIZEOF datetime)
  781.     CopyMem(st,date.stamp,SIZEOF datetime)
  782.     VOID DateStamp(st)
  783.     date.format:=FORMAT_CDN
  784.     date.flags:=0
  785.     date.strdate:=strdate
  786.     date.strday:=strday
  787.     date.strtime:=strtime
  788.     DateToStr(date.stamp)
  789.     IF date THEN Dispose(date)
  790.     StringF(r_str,'\s',strdate)
  791.     RETURN r_str
  792. ENDPROC
  793. /**/
  794. /*"p_MakeWVRequest(bodytext,gadgettext,the_arg)"*/
  795. PROC p_MakeWVRequest(bodytext,gadgettext,the_arg) 
  796. /*===============================================================================
  797.  = Para         : texte (STRING),gadgets (STRING),the_arg.
  798.  = Return       : FALSE if cancel selected,else TRUE.
  799.  = Description  : PopUp a requester (reqtools.library).
  800.  ==============================================================================*/
  801.     DEF ret
  802.     DEF taglist
  803.     dWriteF(['p_MakeWVRequest()\n'],[0])
  804.     IF wv_window<>NIL
  805.         taglist:=[RT_WINDOW,wv_window,RT_LOCKWINDOW,TRUE,RTEZ_REQTITLE,title_req,RT_UNDERSCORE,"_",0]
  806.     ELSE
  807.         taglist:=[RT_PUBSCRNAME,p_LockActivePubScreen(),RTEZ_REQTITLE,title_req,RT_UNDERSCORE,"_",0]
  808.     ENDIF
  809.     ret:=RtEZRequestA(bodytext,gadgettext,0,the_arg,taglist)
  810.     RETURN ret
  811. ENDPROC
  812. /**/
  813. /*"p_MakeWVStringReq(t_reelname,t_idstr,t_size,defcom)"*/
  814. PROC p_MakeWVStringReq(t_reelname,t_idstr,t_size,defcom)
  815. /*===============================================================================
  816.  = Para         : t_reelname (STRING),ID string (STRING),size (LONG).
  817.  = Return       : the result string of request or NIL if cancel selected.
  818.  = Description  : PopUp a StringRequester th choose a command.
  819.  =============================================================================*/
  820.     DEF my_sreq:PTR TO rtfilerequester
  821.     DEF bodyreq[256]:STRING
  822.     DEF buffer[256]:STRING
  823.     DEF return_string[256]:STRING
  824.     DEF ret,taglist
  825.     dWriteF(['p_MakeWVStringReq()\n'],[0])
  826.     StringF(bodyreq,get_WhatView_string(MSGWHATVIEW_EXECCOM),t_reelname,t_idstr,t_size)
  827.     StrCopy(buffer,defcom,ALL)
  828.     IF wv_window<>NIL
  829.         taglist:=[RT_WINDOW,wv_window,RT_LOCKWINDOW,TRUE,RTEZ_REQTITLE,title_req,RTGS_GADFMT,get_WhatView_string(MSGWHATVIEW_EXECCOM_GAD),RTGS_TEXTFMT,bodyreq,RT_UNDERSCORE,"_",0]
  830.     ELSE
  831.         taglist:=[RT_PUBSCRNAME,p_LockActivePubScreen(),RTEZ_REQTITLE,title_req,RTGS_GADFMT,get_WhatView_string(MSGWHATVIEW_EXECCOM_GAD),RTGS_TEXTFMT,bodyreq,RT_UNDERSCORE,"_",0]
  832.     ENDIF
  833.     IF my_sreq:=RtAllocRequestA(RT_REQINFO,NIL)
  834.         ret:=RtGetStringA(buffer,200,title_req,my_sreq,taglist)
  835.         IF ret
  836.             NOP
  837.         ELSE
  838.             buffer:=NIL
  839.         ENDIF
  840.         StringF(argstr,'\s',buffer)
  841.         IF my_sreq THEN RtFreeRequest(my_sreq)
  842.     ELSE
  843.         RETURN FALSE
  844.     ENDIF
  845.     RETURN ret
  846. ENDPROC
  847. /**/
  848. /*"p_WVFileRequester(a)"*/
  849. PROC p_WVFileRequester(a) 
  850. /*===============================================================================
  851.  = Para         : NONE
  852.  = Return       : False if cancel selected.
  853.  = Description  : PopUp a MultiFileRequester,build the whatview arguments.
  854.  ==============================================================================*/
  855.     DEF reqfile:PTR TO rtfilerequester
  856.     DEF liste:PTR TO rtfilelist
  857.     DEF buffer[120]:STRING
  858.     DEF add_liste=0
  859.     DEF ret=FALSE
  860.     DEF the_reelname[256]:STRING
  861.     DEF lock
  862.     reqfile:=NIL
  863.     dWriteF(['p_WVFileRequester()\n'],[0])
  864.     IF reqfile:=RtAllocRequestA(RT_FILEREQ,NIL)
  865.         buffer[0]:=0
  866.         RtChangeReqAttrA(reqfile,[RTFI_DIR,defaultdir,TAG_DONE])
  867.         add_liste:=RtFileRequestA(reqfile,buffer,title_req,
  868.                                   [RT_PUBSCRNAME,p_LockActivePubScreen(),RTFI_FLAGS,FREQF_MULTISELECT+FREQF_PATGAD,RTFI_OKTEXT,oktext[a],RTFI_HEIGHT,200,
  869.                                    RT_UNDERSCORE,"_",TAG_DONE])
  870.         StrCopy(defaultdir,reqfile.dir,ALL)
  871.         IF reqfile THEN RtFreeRequest(reqfile)
  872.         IF add_liste THEN ret:=TRUE
  873.     ELSE
  874.         dWriteF(['p_WVFileRequester() Bad\n'],[0])
  875.         ret:=FALSE
  876.     ENDIF
  877.     IF ret=TRUE
  878.         liste:=add_liste
  879.         IF add_liste
  880.             WHILE liste
  881.                 StringF(the_reelname,'\s',liste.name)
  882.                 IF lock:=Lock(defaultdir,-2)
  883.                     p_AjouteArgNode(myw.adremptylist,the_reelname,lock)
  884.                     UnLock(lock)
  885.                 ENDIF
  886.                 liste:=liste.next
  887.             ENDWHILE
  888.             IF add_liste THEN RtFreeFileList(add_liste)
  889.         ENDIF
  890.     ELSE
  891.         ret:=FALSE
  892.     ENDIF
  893.     RETURN ret
  894. ENDPROC
  895. /**/
  896.  
  897.